package com.chapter06;

import com.bdqn.util.JDBCUtils;

import java.sql.Connection;
import java.sql.SQLException;

public class Test02_Transaction {
    public static void main(String[] args) throws SQLException, ClassNotFoundException {

        Connection connection = JDBCUtils.getConnection();

        // ①、关闭自动提交
        connection.setAutoCommit(false);

        try {
            // 需求：诸葛亮把50元转给刘备

            // 第一步：诸葛亮的账户减少50元
            String zhuSql = "UPDATE user_table SET balance = balance - 50 WHERE `name` = ?";
            JDBCUtils.updateTx(connection, zhuSql, "诸葛亮"); // 相同连接

            // 执行其他业务
            // int i = 10 / 0; // 报一个算术异常

            // 第二步：刘备的账户增加50元
            String liuSql = "UPDATE user_table SET balance = balance + 50 WHERE `name` = ?";
            JDBCUtils.updateTx(connection, liuSql, "刘备"); // 相同连接

            connection.commit();// 提交事务，保证两条sql都同时成功
        } catch (Exception e) {
            e.printStackTrace();
            connection.rollback();// 回滚事务，任何一条sql执行失败，都全部失败
        } finally {
            connection.setAutoCommit(true);
            JDBCUtils.closeResource(connection, null, null);
        }

        // 组成手动提交事务的条件：
        // 第一：要使用同一个连接对象
        // 第二：该连接对象，关闭了自动提交事务的功能

    }
}
